1. Field of the Invention
The present invention is related to computer systems in which performance is measured using hardware measurement circuits, and in particular to techniques for maintaining performance monitoring measurements across program execution cycles.
2. Description of Related Art
In computer systems, performance can be improved by monitoring the performance of the computer system while executing various programs, for example, the number of instructions executed or the total time elapsed while performing a task is a benchmark indication of the efficiency of the computer system at performing the task. By observing characteristics of program execution, in particular, by observing characteristics of “hot spots”, i.e., portions of a program that are executed most frequently, the program can be optimized, either off-line or on-the-fly, using the result of the performance measurements.
However, when a task is off-loaded, when the present execution of a program is terminated, to be resumed at a later time and the program is unloaded from memory, the state of the performance monitoring hardware is typically lost, making it difficult to monitor performance of tasks that are executed intermittently. In some cases the performance monitoring state may not be accessible so that the state cannot be stored and retrieved when the task is off-loaded.
A particular performance monitoring technique, as disclosed in U.S. patent application Ser. No. 12/828,697 filed on Jul. 10, 2010 entitled “HARDWARE ASSIST FOR OPTIMIZING CODE DURING PROCESSING”, having common inventors with the present U.S. patent application, and which is incorporated herein by reference, identifies execution paths, i.e., sequences of program instructions, in which all of the branch instructions resolve to particular directions, so that the most frequently executed paths, corresponding to the hot spots described above, are given the most effort and resources for program optimization. Rather than collecting the entire state of the branch history for each execution path in order to identify which path is currently being taken by a program, a simplified technique uses branch prediction data to assume a particular execution path is taken if all predictions are correct. Branch prediction state information is also typically not retained, and may not be accessible for storage and retrieval.